package org.jaaksi.commondemo.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.LinearLayout;

/**
 * Created by an on 2017/4/5.<br/>
 */

public class MyLinearLayout extends LinearLayout {
  public MyLinearLayout(Context context) {
    super(context);
  }

  public MyLinearLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  @Override public boolean dispatchTouchEvent(MotionEvent ev) {
    System.out.println("=========== dispatchTouchEvent " + getAction(ev));
    return super.dispatchTouchEvent(ev);
  }

  @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  }

  /**
   * down事件
   * 1.如果onInterceptTouchEvent返回false（不拦截），但是子view没有消费down事件，事情传递给ViewGroup
   * 如果ViewGroup也没有消费掉down事件，那么事件就会继续上传给Activity,并且move，up事件不会再传递给ViewGroup
   * 如果ViewGroup消费掉down事件，那么move和up不会再走onInterceptTouchEvent，而是直接交由onTouchEvent处理
   *
   * 2.如果onInterceptTouchEvent返回false（不拦截），子view消费了down事件，事情不会再传递给ViewGroup的onTouchEvent
   * move up事件依然会经 onInterceptTouchEvent
   *
   * 3.如果onInterceptTouchEvent返回true（拦截），子view不会搜到任何事件,如果onTouchEvent不消耗down事件，
   * 那么后续事件也不会再分发了。
   * 如果消耗down事件，后续事件会直接交由onTouchEvent处理，不再经onInterceptTouchEvent
   *
   * 4.在down 一连串move up过程中，onInterceptTouchEvent 最多只会处理一次ACTION_MOVE
   * 在事件流中，onInterceptTouchEvent拦截了任意一个，后续的事件就不会再经onInterceptTouchEvent了
   */
  @Override public boolean onInterceptTouchEvent(MotionEvent event) {
    System.out.println("=========== MyLinearLayout onInterceptTouchEvent " + getAction(event));

    return false;
    /*if (event.getAction() == MotionEvent.ACTION_MOVE) {
      return true;
    }
    //return super.onInterceptTouchEvent(event);
    return false;*/
  }

  @Override public boolean onTouchEvent(MotionEvent event) {
    System.out.println("=========== MyLinearLayout onTouchEvent " + getAction(event));
    //if (event.getAction() == MotionEvent.ACTION_DOWN) {
    //  return true;
    //}
    return false;
    //return super.onTouchEvent(event);
  }

  public static String getAction(MotionEvent event) {
    String action = "";
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        action = "ACTION_DOWN";
        break;
      case MotionEvent.ACTION_MOVE:
        action = "ACTION_MOVE";
        break;
      case MotionEvent.ACTION_UP:
        action = "ACTION_UP";
        break;
    }
    return action;
  }

  @Override public void computeScroll() {
    System.out.println("=========== MyLinearLayout computeScroll ");
    super.computeScroll();
  }
}
